import pandas as pd
import logging

# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s',
    handlers=[
        logging.FileHandler("count_statistics.log"),
        logging.StreamHandler()
    ]
)

def count_statistics():
    """
    统计笔记标题为空白的样本数和笔记类型为图文的样本数
    """
    try:
        # 读取初始表
        file_path = "d:/Desktop/XHSCrawer/V2/results/初始表.xlsx"
        logging.info(f"正在读取初始表: {file_path}")
        df = pd.read_excel(file_path)
        
        total_rows = len(df)
        logging.info(f"初始表总行数: {total_rows}")
        
        # 获取所有列名，以便确认正确的列名
        columns = df.columns.tolist()
        logging.info(f"表中所有列名: {columns}")
        
        # 查找可能的标题列
        title_columns = []
        for col in columns:
            if '标题' in col or 'title' in col.lower():
                title_columns.append(col)
        
        if not title_columns:
            logging.warning("未找到包含'标题'或'title'的列")
        else:
            logging.info(f"找到可能的标题列: {title_columns}")
            # 选择第一个可能的标题列
            title_col = title_columns[0]
            logging.info(f"使用 '{title_col}' 作为标题列")
            
            # 统计空白标题数量
            # 检查空白、None、空字符串等情况
            blank_title_count = df[title_col].isna().sum() + (df[title_col] == '').sum() + (df[title_col].astype(str).str.strip() == '').sum()
            logging.info(f"空白标题的样本数: {blank_title_count}")
            
            # 提取空白标题的样本
            blank_titles_df = df[df[title_col].isna() | (df[title_col] == '') | (df[title_col].astype(str).str.strip() == '')]
            if not blank_titles_df.empty:
                # 保存空白标题样本到文件
                blank_titles_df.to_excel("d:/Desktop/XHSCrawer/V2/results/空白标题样本.xlsx", index=False)
                logging.info(f"已保存空白标题样本到 '空白标题样本.xlsx'")
        
        # 查找可能的类型列
        type_columns = []
        for col in columns:
            if '类型' in col or 'type' in col.lower():
                type_columns.append(col)
        
        if not type_columns:
            logging.warning("未找到包含'类型'或'type'的列")
        else:
            logging.info(f"找到可能的类型列: {type_columns}")
            # 选择第一个可能的类型列
            type_col = type_columns[0]
            logging.info(f"使用 '{type_col}' 作为类型列")
            
            # 获取类型列的所有唯一值
            unique_types = df[type_col].unique()
            logging.info(f"类型列的所有唯一值: {unique_types}")
            
            # 统计图文类型数量
            # 尝试多种可能的图文类型表示
            image_text_keywords = ['图文', 'image', 'text', 'image_text', '图文类型']
            image_text_count = 0
            
            for keyword in image_text_keywords:
                keyword_count = ((df[type_col].astype(str).str.contains(keyword, case=False, na=False))).sum()
                if keyword_count > 0:
                    logging.info(f"包含关键词 '{keyword}' 的样本数: {keyword_count}")
                    image_text_count += keyword_count
            
            # 精确匹配
            exact_matches = 0
            for val in unique_types:
                if str(val).strip() == '图文':
                    exact_matches = (df[type_col] == val).sum()
                    break
            
            if exact_matches > 0:
                image_text_count = exact_matches
                logging.info(f"精确匹配'图文'的样本数: {exact_matches}")
            
            logging.info(f"笔记类型为图文的样本数: {image_text_count}")
            
            # 提取图文类型的样本
            if exact_matches > 0:
                image_text_df = df[df[type_col] == '图文']
            else:
                # 使用包含关键词的方式
                mask = False
                for keyword in image_text_keywords:
                    mask |= df[type_col].astype(str).str.contains(keyword, case=False, na=False)
                image_text_df = df[mask]
            
            if not image_text_df.empty:
                # 保存图文类型样本到文件
                image_text_df.to_excel("d:/Desktop/XHSCrawer/V2/results/图文类型样本.xlsx", index=False)
                logging.info(f"已保存图文类型样本到 '图文类型样本.xlsx'")
        
        return {
            'total_rows': total_rows,
            'blank_title_count': blank_title_count if 'blank_title_count' in locals() else None,
            'image_text_count': image_text_count if 'image_text_count' in locals() else None
        }
        
    except Exception as e:
        logging.error(f"统计过程中出错: {str(e)}")
        raise

if __name__ == "__main__":
    logging.info("开始统计笔记数据...")
    result = count_statistics()
    logging.info("统计完成")
    
    print(f"\n统计结果摘要:")
    print(f"- 初始表总行数: {result['total_rows']}")
    if result['blank_title_count'] is not None:
        print(f"- 笔记标题为空白的样本数: {result['blank_title_count']}")
    if result['image_text_count'] is not None:
        print(f"- 笔记类型为图文的样本数: {result['image_text_count']}")
    print(f"\n详细日志已保存到 count_statistics.log")
